package com.ihr360.payroll.model.dto.salary.projection;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.ihr360.payroll.model.dto.salary.basecode.SalaryTaxType;
import com.ihr360.payroll.model.dto.salary.embeddable.SystemSalaryFieldValue;
import com.ihr360.payroll.model.dto.salary.meta.system.SystemSalaryField;
import com.ihr360.payroll.model.vo.SalaryFieldTypeVo;
import com.ihr360.rest.core.Ihr360Projection;

import java.util.List;

/**
 * @author tomtao
 */
@Ihr360Projection(name = "salaryFieldMetaProjection", types = {SystemSalaryField.class})
public interface SalaryFieldMetaProjection {

    String getId();

    String getName();

    String getCode();

    boolean isPersonalSalaryNumOpEditable();

    boolean isCompanyCostNumOpEditable();

    boolean isPayerEditable();

    boolean isActualPayerEditable();

    boolean isValueMetaEditable();

    boolean isPersonalSalaryNumOpVisible();

    boolean isTaxTypeEditable();

    boolean isCompanyCostNumOpVisible();

    boolean isPayerVisible();

    boolean isActualPayerVisible();

    boolean isTaxTypeVisible();

    boolean isValueMetaVisible();

    boolean isValueSourceEditable();

    boolean isValueSourceVisible();

    boolean isTaxMergeField();

    String getCategoryCode();

    SystemSalaryFieldValue getValueMeta();

    SalaryTaxType getTaxType();

    List<SalaryTaxType> getTaxTypes();

    @JsonProperty(value = "type")
    SalaryFieldTypeVo getTypeVo();
}
